package data_structure;

import data_structure.entry.ListNode;

public class RemoveElements {

    //recursion
    public ListNode removeElements(ListNode head,int val) {
//        if(head==null){
//            return null;
//        }
//        head.next=removeElements (head.next,val);
//        return head.val==val?head.next:head;

//        while(head!=null&&head.val==val){
//            ListNode ret=head;
//            head=head.next;
//            ret.next=null;
//        }
//        if(head==null){
//            return null;
//        }
//        ListNode prev=head;
//        while(prev.next != null){
//
//            if(prev.next.val == val){
//                ListNode ret=prev.next;
//                prev.next=ret.next;
//                ret.next=null;
//            }else{
//                prev=prev.next;
//            }
//        }
//        return head;
//    }

        ListNode dummyHead=new ListNode(-1);
        dummyHead.next=head;
        ListNode prev=dummyHead;

        while(prev.next!=null){
            if(prev.next.val==val){
                ListNode ret=prev.next;
                prev.next=ret.next;
                ret.next=null;
            }else{
                prev=prev.next;
            }
        }
        return dummyHead.next;
    }

}
